Soru & Cevap

Android uygulamasında harici veritabanı ve veri ekleme

14.03.2017 - 04:09

Androide dışardan SQLite veritabanı ekledim. Uygulama üzerinden bu veritabanına veri eklemeye çalışıyorum fakat uygulama durduruldu şeklinde hata alıyorum. Nerede yanlış yaptığımı bulamadım yardımcı olabilir misiniz? Database kodlarım şu şekilde:

public class Database extends SQLiteOpenHelper {

    SQLiteDatabase db;
    static String dbPath;
    static String databaseName = "kelimeDB";
    final Context context;

    public Database(Context context){
        super(context,databaseName,null,1);
        dbPath = context.getFilesDir().getParent() + "/databases/";
        this.context = context;
    }

    public void CreateDatabase(){
        boolean dbExists = checkDatabase();
        if (!dbExists){
            this.getReadableDatabase();
            try{
                copyDatabase();
            }
            catch (Exception e){
                Log.w("hata","Veritabanı kopyalanamıyor");
                throw new Error("Veritabanı kopyalanamıyor");
            }
        }
    }

    //Veritabanı daha önce oluşturulmuş mu oluşturulmamış mı bunu öğrenmek için yazılan method
    boolean checkDatabase(){
        SQLiteDatabase checkDB = null;
        try{
            String myPath = dbPath + databaseName;
            checkDB = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READONLY);
        }
        catch (Exception e){
            Log.w("hata","Veritabanı açılamadı");
        }
        if (checkDB != null){checkDB.close();}
        return checkDB != null ? true : false;
    }

    //Assest dizinine koyduğumuz sql dosyasındaki verileri kopyalıyoruz
    void copyDatabase(){
        try{
            InputStream myInput = context.getAssets().open(databaseName);
            String outFileName = dbPath + databaseName;
            OutputStream myOutput = new FileOutputStream(outFileName);
            byte[] buffer = new byte[1024];
            int length;

            while ((length = myInput.read(buffer)) > 0){
                myOutput.write(buffer, 0, length);
            }

            myOutput.flush();
            myInput.close();
            myOutput.close();
        }
        catch (Exception e){
            Log.w("hata","Kopya oluşturma hatası");
        }
    }

    //Veritabanı açma işlemi yapılıyor
    void openDatabase(){
        String myPath = dbPath + databaseName;
        db = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
    }

    @Override
    public synchronized  void close(){
        if (db != null && db.isOpen()){
            db.close();

            super.close();
        }
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {    }

    public void kelimeEkleBaslangic(String kelimeTr,String kelimeEng,int kelimeGrupId){
        this.close();
        this.openDatabase();
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("kelimeTr",kelimeTr);
        values.put("kelimeEng",kelimeEng);
        values.put("kelimeGrupId",kelimeGrupId);
        database.insert("baslangicKelimeListesi",null,values);
        database.close();
    }

    public void kelimeEkleOrta(String kelimeTr,String kelimeEng,int kelimeGrupId){
        this.close();
        this.openDatabase();
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("kelimeTr",kelimeTr);
        values.put("kelimeEng",kelimeEng);
        values.put("kelimeGrupId",kelimeGrupId);
        database.insert("ortaKelimeListesi",null,values);
        database.close();
    }

    public void kelimeEkleIleri(String kelimeTr,String kelimeEng,int kelimeGrupId){
        this.close();
        this.openDatabase();
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("kelimeTr",kelimeTr);
        values.put("kelimeEng",kelimeEng);
        values.put("kelimeGrupId",kelimeGrupId);
        database.insert("ileriKelimeListesi",null,values);
        database.close();
    }
}

 

108 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user uygar07
uygar07
14.03.2017 - 11:36

Aldığınız hatanın detaylarınıda paylaşırsanız daha sağlıklı olur.

zeynep
16.03.2017 - 11:37
Kelime eklediğim zaman uygulama durduruldu diyor.
picture-16689-1471440015.jpg
Rahmican
14.03.2017 - 04:35

Zeynep merhaba, 

Localde çalışması zorunlu bir şey değilse Firebase'i kullanmanı öneririm. Kullanınca da bu kadar kod'a gerek kalmadığını göreceksin.

O kadar yazmışsın tabi silmek mantıksız olur, daha önce sqlite kullanmadım ama şöyle bir soru sorulmuş burayı bir incele ve kodlarınla karşılaştır istersen: 

http://stackoverflow.com/questions/9109438/how-to-use-an-existing-database-with-an-android-application

Yine bir şey bulursam yazacağım buraya, iyi çalışmalar.

zeynep
14.03.2017 - 05:03
İlgilendiğiniz için teşekkür ederim. Attığınız linki inceledim fakat sorunuma çözüm bulamadım. Tekrardan teşekkür ederim.